package com.ybkj.o2o.mc.mapper;

import com.ybkj.o2o.mc.common.query.AccountQuery;
import com.ybkj.o2o.mc.entity.PassengerAccount;

import org.apache.ibatis.annotations.Param;

import java.util.List;


public interface PassengerAccountMapper {

  /**
   * 分页查询用户账户信息.
   *
   * @param passengerId 用户主键为空则查询所有
   * @param offset      偏移量
   * @param rows        每页显示数量
   */
  List<PassengerAccount> selectByPassengerForPage(@Param("passengerId") Long passengerId,
                                                  @Param("offset") int offset,
                                                  @Param("rows") int rows);

  /**
   * 统计用户账户数量.
   *
   * @param passengerId 用户主键为空则统计所有
   */
  long countByPassenger(@Param("passengerId") Long passengerId);

  /**
   * 根据账户主键和乘客主键查询账户明细信息.
   *
   * @param accountId   账户明细主键
   * @param passengerId 乘客主键
   * @return 账户明细
   */
  PassengerAccount selectByIdAndPassenger(@Param("accountId") Long accountId,
                                          @Param("passengerId") Long passengerId);

  /**
   * 根据账户主键修改账户记录.
   *
   * @param passengerAccount 账户明细
   * @return 受影响的数量
   */
  int updateByPrimaryKey(PassengerAccount passengerAccount);

  /**
   * 分页查询账户明细记录.
   *
   * @param accountQuery 查询条件
   * @return 账户明细列表
   */
  List<PassengerAccount> selectByAccountQuery(AccountQuery accountQuery);

  /**
   * 根据订单、支付类型、系统key查询账户明细信息.
   *
   * @param orderId 订单主键
   * @param payType 支付类型
   * @param appKey  系统key
   * @return 账户明细列表
   */
  List<PassengerAccount> selectByOrderAndPayType(@Param("orderId") Long orderId,
                                                 @Param("payType") String payType,
                                                 @Param("appKey") String appKey);

  /**
   * 根据条件统计明细记录数量.
   *
   * @param accountQuery 查询条件
   * @return 账户明细记录数量
   */
  Long countByAccountQuery(AccountQuery accountQuery);

  /**
   * 条件查询账户操作金额总和.
   *
   * @param accountQuery 查询条件
   * @return 账户记录总和
   */
  double sumAccount(AccountQuery accountQuery);

  /**
   * 保存账户明细信息.
   *
   * @param passengerAccount 账户明细
   * @return 受影响行数
   */
  int insert(PassengerAccount passengerAccount);
}